package com.smarthome.config;

import org.springframework.ai.openai.OpenAiChatModel;
import org.springframework.ai.openai.OpenAiChatOptions;
import org.springframework.ai.openai.api.OpenAiApi;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpHeaders;
import org.springframework.web.client.RestClient;

@Configuration
public class AiConfig {

    @Value("${spring.ai.openai.api-key}")
    private String apiKey;

    @Value("${spring.ai.openai.base-url}")
    private String baseUrl;

    @Bean
    public OpenAiApi openAiApi() {
//        // 使用建造者模式创建OpenAiApi（替代过时的构造函数）
//        return OpenAiApi.builder()
//                .baseUrl(baseUrl)          // 设置API基础地址（DeepSeek地址）
//                .apiKey(apiKey)            // 设置API密钥
//                .restClientBuilder(RestClient.builder())  // 配置RestClient（可自定义）
//                .build();


        // 使用建造者模式创建OpenAiApi，兼容OpenAI接口规范
//        return OpenAiApi.builder()
//                .restClientBuilder(RestClient.builder()
//                        .baseUrl(baseUrl)  // 基础地址指向DeepSeek的兼容端点
//                        .defaultHeader("Authorization", "Bearer " + apiKey)  // 标准OpenAI认证头
//                        .defaultHeader("Content-Type", "application/json"))  // 注入自定义的RestClient
//                .build();

        // 1. 解析sk格式的token，提取AccessKeyId和AccessKeySecret
        // 格式要求：sk-AccessKeyId:AccessKeySecret
//        if (!apiKey.startsWith("sk-")) {
//            throw new IllegalArgumentException("API Key必须以sk-开头");
//        }
//        String[] parts = apiKey.substring(3).split(":", 2); // 去掉"sk-"前缀后分割
//        if (parts.length != 2) {
//            throw new IllegalArgumentException("API Key格式错误，应为sk-AccessKeyId:AccessKeySecret");
//        }
//        String accessKeyId = parts[0];
//        String accessKeySecret = parts[1];
//
//        // 3. 构建OpenAiApi（适配阿里云百炼的OpenAI兼容接口）
//        return OpenAiApi.builder()
//                .baseUrl(baseUrl)
//                .apiKey(apiKey) // 这里传入原始sk格式token（实际认证用的是上面解析的密钥）
//                .restClientBuilder(RestClient.builder()
//                        .baseUrl(baseUrl)
//                        .defaultHeader(HttpHeaders.AUTHORIZATION, "Bearer " + accessKeyId + ":" + accessKeySecret)
//                        .defaultHeader(HttpHeaders.CONTENT_TYPE, "application/json")) // 使用自定义的RestClient
//                .build();


        String baseUrl = "https://dashscope.aliyuncs.com/compatible-mode";
        String apiKey = "sk-5ac9c39a3b4341f6b846bfe9c8ce3d4e"; // 直接使用拿到的sk开头token

        // 构建OpenAiApi，无需自定义认证拦截器
        return OpenAiApi.builder()
                .baseUrl(baseUrl)
                .apiKey(apiKey) // 直接传入sk开头的token
                .restClientBuilder(RestClient.builder())
                .build();
    }

    @Bean
    public OpenAiChatModel openAiChatModel(OpenAiApi openAiApi) {
        // 在模型初始化时强制设置默认模型
        OpenAiChatOptions defaultOptions = OpenAiChatOptions.builder()
                .model("deepseek-v3")  // 硬编码DeepSeek模型
                .build();
        return new OpenAiChatModel(openAiApi, defaultOptions);
    }
}
